Программирование сетевых приложений
Примеры интеграции
class DistributedCalculator : public QObject {
Q_OBJECT
private:
JsonRpcClient* client;
ServiceMonitor* monitor;
public:
DistributedCalculator(const QString& serverUrl,
QObject* parent = nullptr)
: QObject(parent) {
client = new JsonRpcClient(serverUrl, this);
monitor = new ServiceMonitor(this);
connect(client, &JsonRpcClient::methodSuccess,
this, &DistributedCalculator::onCalculationSuccess);
connect(client, &JsonRpcClient::methodError,
this, &DistributedCalculator::onCalculationError);
connect(monitor, &ServiceMonitor::statisticsUpdated,
this, &DistributedCalculator::onStatisticsUpdated);
}
void calculate(const QString& operation,
const QJsonArray& params) {
monitor->updateMetric("lastOperation", operation);
monitor->updateMetric("operationsCount",
monitor->getStatistics()["operationsCount"]
.toInt() + 1);
client->callMethod(operation, params);
}
void performComplexCalculation() {
QJsonArray params1{10, 5};
client->callMethod("add", params1);
QJsonArray params2{8, 3};
client->callMethod("multiply", params2);
QJsonArray params3{100, 4};
client->callMethod("divide", params3);
}
signals:
void calculationResult(const QString& operation,
double result);
void calculationError(const QString& error);
void systemStatistics(const QJsonObject& stats);
private slots:
void onCalculationSuccess(const QJsonValue& result) {
double value = result.toDouble();
emit calculationResult("operation", value);
}
void onCalculationError(const QJsonObject& error) {
QString errorMsg = error["message"].toString();
emit calculationError(errorMsg);
}
void onStatisticsUpdated(const QJsonObject& stats) {
emit systemStatistics(stats);
}
};
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
DistributedCalculator calculator("http://localhost:8080/jsonrpc");
QObject::connect(&calculator, &DistributedCalculator::calculationResult,
[](const QString& op, double result) {
qDebug() << "Результат:" << result;
});
QObject::connect(&calculator, &DistributedCalculator::calculationError,
[](const QString& error) {
qDebug() << "Ошибка:" << error;
});
calculator.calculate("add", QJsonArray{15, 25});
calculator.calculate("multiply", QJsonArray{7, 8});
calculator.performComplexCalculation();
return app.exec();
}